import cv2
if __name__ == '__main__':
    # 1. 图片输入
    image_np = cv2.imread("C:\\Users\\20436\Desktop\kunkun.jpg")

    # 2. 模板输入
    logo = cv2.imread("C:\\Users\\20436\Desktop\\xiaoji.png")

    # 3. 灰度化
    gray_logo = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)

    # 4. 二值化
    _, mask_logo = cv2.threshold(
        gray_logo,
        1,  # 只要能分离前景背景即可，背景是0
        255,
        cv2.THRESH_BINARY_INV  # 为了让前景黑色，使用反阈值法
    )

    # 5. 与运算
    # 在lena图中ROI一个上面尺寸的区域
    roi = image_np[307:337, 318:345]
    # 按位与
    image_np_bg = cv2.bitwise_and(
        roi,
        roi,
        mask=mask_logo
    )
    # 6. 图像融合
    dst = cv2.add(image_np_bg, logo)
    # dst是小图融合后的效果，需要把像素值替换到原始lena图中
    image_np[307:337, 318:345] = dst
    cv2.imshow('image_np',image_np)
    cv2.imwrite('image_np.jpg', image_np)
    cv2.waitKey(0)